package main

/*
在Go语言编程中你不需要去自己写进程、线程、协程，你的技能包里只有一个技能–goroutine，
当你需要让某个任务并发执行的时候，你 只需要把这个任务包装成一个函数，开启一个 goroutine 去执行这个函数 就可以了，就是这么简单粗暴。
goroutine 是由官方实现的超级 “9993_线程池” ：每个实力 4~5KB 的栈内存占用和由于实现机制而大幅减少的创建和销毁开销是 go高并发 的根本原因。

goroutine 奉行通过通信来共享内存，而不是共享内存来通信。

2. goroutine 和协程的关系
goroutine 是 协程 的 go 语言实现，相当于把别的语言的类库的功能内置到语言里。从调度上看，goroutine 的调度开销远远小于线程调度开销。

不同的是：我们都知道，协程是用户级线程，由用户自己实现调度。而 Golang 在 runtime，系统调用等多方面对 goroutine 调度进行了封装和处理，
即 goroutine 不完全是用户控制，一定程度上由 go 运行时（runtime）管理，好处：当某 goroutine 阻塞时，会 让出 CPU 给其他 goroutine。

实际上，goroutine 并非传统意义上的协程，现在主流的线程模型分三种：内核级线程模型、用户级线程模型和两级线程模型（也称混合型线程模型），
传统的协程库属于用户级线程模型，而 goroutine 和它的 Go Scheduler 在底层实现上其实是属于 两级线程模型，因此，有时候为了方便理解可以简单把 goroutine 类比成协程，但心里一定要有个清晰的认知 — goroutine 并不等同于协程。

在下文中，如果我提到协程，就指的是 goroutine ，它们之间的区别你在心里知道就好。
*/
func main() {

}
